package IT.DataAccess;

import IT.Entities.UsuarioPerfil;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import java.util.logging.Level;
import java.util.logging.Logger;

public class DatUsuarioPerfil implements IDatUsuarioPerfil{
    
    private UsuarioPerfil oPerfil;
    private List<UsuarioPerfil> oLista;
    private BDConexion oBase;
    
    private Connection oConexion;
    private CallableStatement oCst;    
    private ResultSet oRst;       
   
    public List<UsuarioPerfil> Listar() {
        oLista=new ArrayList<UsuarioPerfil>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_UsuarioPerfilListar()}");
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new UsuarioPerfil(
                        oRst.getInt("cod_per_in"), 
                        oRst.getString("nom_per_vc"), 
                        oRst.getInt("est_per_in"), 
                        oRst.getString("Estado"),
                        oRst.getInt("Cantidad")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oLista;
    }

    public UsuarioPerfil Ind(int nCodgo) {
        oPerfil=new UsuarioPerfil();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_UsuarioPerfilInd(?)}");
            oCst.setInt(1, nCodgo);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oPerfil.setCod_per_in(oRst.getInt("cod_per_in"));
                oPerfil.setNom_per_vc(oRst.getString("nom_per_vc"));
                oPerfil.setEst_per_in(oRst.getInt("est_per_in"));
                oPerfil.setEstado(oRst.getString("Estado"));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oPerfil;
    }

    public int Insertar(UsuarioPerfil ent) {
        int nCodigo=0;
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_UsuarioPerfilInsertar(?,?,?)}");
            oCst.registerOutParameter(1, java.sql.Types.INTEGER);
            oCst.setString(2, ent.getNom_per_vc());
            oCst.setInt(3, ent.getEst_per_in());
            
            oCst.execute();
            nCodigo=oCst.getInt(1);
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
        return nCodigo;
    }

    public void Editar(UsuarioPerfil ent) {
      try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_UsuarioPerfilEditar(?,?,?)}");              
            
            oCst.setInt(1, ent.getCod_per_in());
            oCst.setString(2, ent.getNom_per_vc());
            oCst.setInt(3, ent.getEst_per_in());
            
            oCst.execute();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public int Eliminar(int nCodigo ) {
      int nResultado=0;
      try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_UsuarioPerfilEliminar(?,?)}");              
            
            oCst.setInt(1, nCodigo);          
            oCst.registerOutParameter(2, java.sql.Types.INTEGER);
            oCst.execute();
            nResultado=oCst.getInt(2);
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
      return nResultado;
    }
}
